package org.example.lanchain.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.example.lanchain.bean.KnowledgeDocument;
import org.example.lanchain.bean.KnowledgeSearchResult;
import org.example.lanchain.bean.KnowledgeStats;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 知识库服务接口
 * 提供知识库文档的上传、搜索、统计等业务操作
 */
public interface KnowledgeService extends IService<KnowledgeDocument> {

    /**
     * 上传文档到知识库
     * @param file 上传的文件
     * @param knowledgeBaseId 所属知识库ID (可以为null，表示不属于任何知识库)
     * @return 返回文档信息
     */
    KnowledgeDocument uploadDocument(MultipartFile file, Long knowledgeBaseId);

    /**
     * 获取所有文档列表
     * @return 返回文档列表
     */
    List<KnowledgeDocument> getAllDocuments();

    /**
     * 根据知识库ID获取文档列表
     * @param knowledgeBaseId 知识库ID
     * @return 返回该知识库下的文档列表
     */
    List<KnowledgeDocument> getDocumentsByKnowledgeBaseId(Long knowledgeBaseId);

    /**
     * 根据ID获取文档
     * @param id 文档ID
     * @return 返回文档信息
     */
    KnowledgeDocument getDocumentById(Long id);

    /**
     * 删除文档
     * @param id 文档ID
     * @return 返回删除结果
     */
    boolean deleteDocument(Long id);

    /**
     * 搜索知识库
     * @param query 搜索查询
     * @param maxResults 最大结果数
     * @param minScore 最小相似度
     * @return 返回搜索结果列表
     */
    List<KnowledgeSearchResult> searchKnowledge(String query, int maxResults, double minScore);

    /**
     * 获取知识库统计信息
     * @return 返回统计信息
     */
    KnowledgeStats getKnowledgeStats();

    /**
     * 重新处理文档（重新向量化）
     * @param id 文档ID
     * @return 返回处理结果
     */
    boolean reprocessDocument(Long id);
} 